# Debian aptitude(1) completion


comp_include _comp_dpkg_hold_packages _comp_dpkg_installed_packages _filedir _get_cword


aptitude()
{
	local cur dashoptions prev special i

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}


	dashoptions='-S -u -i -h --help --version -s --simulate -d \
		     --download-only -P --prompt -y --assume-yes -F \
		     --display-format -O --sort -w --width -f -r -g \
		     --with-recommends --with-suggests -R -G \
		     --without-recommends --without-suggests -t \
		     --target-release -V --show-versions -D --show-deps\
		     -Z -v --verbose --purge-unused'

	for (( i=0; i < ${#COMP_WORDS[@]}-1; i++ )); do
	    if [[ ${COMP_WORDS[i]} == @(install|reinstall|hold|unhold|markauto|unmarkauto|dist-upgrade|full-upgrade|download|show|forbid-version|purge|remove|changelog|why|why-not|keep|keep-all) ]]; then
		special=${COMP_WORDS[i]}
	    fi
	    #exclude some mutually exclusive options
	    [[ ${COMP_WORDS[i]} == '-u' ]] && dashoptions=${dashoptions/-i}
	    [[ ${COMP_WORDS[i]} == '-i' ]] && dashoptions=${dashoptions/-u}
	done

	if [[ -n "$special" ]]; then
	   case $special in
	       @(install|hold|markauto|unmarkauto|dist-upgrade|full-upgrade|download|show|changelog|why|why-not))
		   COMPREPLY=( $( apt-cache pkgnames $cur 2> /dev/null ) )
		   return 0
		   ;;
	       @(purge|remove|reinstall|forbid-version))
  		   COMPREPLY=( $( _comp_dpkg_installed_packages $cur ) )
		   return 0
		   ;;
	       unhold)
  		   COMPREPLY=( $( _comp_dpkg_hold_packages $cur ) )
		   return 0
		   ;;

	   esac
	fi

	case $prev in
	    # don't complete anything if these options are found
	    @(autoclean|clean|forget-new|search|upgrade|safe-upgrade|update|keep-all))
		return 0
		;;

	    -S)
		_filedir
		return 0
		;;

	    -@(t|-target-release|-default-release))
		COMPREPLY=( $( apt-cache policy | \
		    grep "release.o=Debian,a=$cur" | \
		    sed -e "s/.*a=\(\w*\).*/\1/" | uniq 2> /dev/null ) )
		return 0
		;;

	esac

	if [[ "$cur" == -* ]]; then
	    COMPREPLY=( $( compgen -W "$dashoptions" -- $cur ) )
	else
	    COMPREPLY=( $( compgen -W 'update upgrade safe-upgrade forget-new clean \
				       autoclean install reinstall remove \
				       hold unhold purge markauto unmarkauto why why-not \
				       dist-upgrade full-upgrade download search show \
				       forbid-version changelog keep-all' -- $cur ) )
	fi


	return 0
} # aptitude()

comp_install -F aptitude  # Make completion persistent for subsequent invocations

aptitude  # Generate completions for first invocation
